/*
 * @(#)RoleMenuController.java v2.0 2016年11月22日
 * 百联集团	版权所有
 * 
 * 文件描述...
 *
 * @Title: RoleMenuController.java 
 * @Package com.bailiangroup.gsp.oms.controller 
 * @author tylong
 * @date 2016年11月22日 下午11:35:41
 * @version v2.0
 * 历史版本：
 * 	1. 【2016年11月22日】 创建文件   by tylong
 */
package com.ess.web.controller.role;


import com.bailian.pagehelper.PageInfo;
import com.blgroup.b2b.common.constant.SysMessage;
import com.blgroup.b2b.common.entity.MessageResultInfo;
import com.blgroup.b2b.common.model.Role;
import com.blgroup.b2b.common.model.RoleMenu;
import com.blgroup.b2b.web.dto.AddRoleMenuReqDto;
import com.blgroup.b2b.web.dto.DeleteRoleMenuReqDto;
import com.blgroup.b2b.web.dto.QueryRoleMenuReqDto;
import com.blgroup.b2b.web.dto.QueryRoleReqDto;
import com.blgroup.b2b.web.service.sys.RoleMenuService;
import com.blgroup.b2b.web.service.sys.RoleService;
import com.blgroup.b2b.web.util.BeanUtils;
import com.ess.web.controller.base.BaseController;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.List;

/** 
 * 角色Controller
 * 
 * @ClassName: RoleMenuController 
 * @author tylong
 * @date 2016年11月22日 下午11:35:41
 * @version v2.0 
 *  
 */
@Controller
@RequestMapping(value = "/sys")
public class RoleMenuController extends BaseController {

	/**
	 * 日志变量
	 */
	static final Logger logger = LoggerFactory.getLogger(RoleMenuController.class);
	/**
	 * 角色service
	 */
	@Autowired
	RoleMenuService roleMenuService;
	
	@Autowired
	RoleService roleService;
	
	/**
	 * 
	 * 方法描述：   删除角色
	 * 业务逻辑说明  ：删除角色 
	 * 1、根据唯一主键删除<br/>
	 * @Title: deleteRoleMenu 
	 * @date 2016年11月22日 下午8:31:28
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @param response
	 * @param dto
	 * @return
	 */
	@RequestMapping(value = "/deleteRoleMenu", method = RequestMethod.POST)
	@ResponseBody
	public Object deleteRoleMenu(HttpServletRequest request, HttpServletResponse response, @Validated @RequestBody DeleteRoleMenuReqDto dto) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		try {
			//删除角色
			resultInfo=roleMenuService.deleteRoleMenu(dto);
		} catch (Exception e) {
			logger.error("删除角色失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("删除角色失败");
		}
		return resultInfo;
	}
	/**
	 * 
	 * 方法描述：   添加角色
	 * 业务逻辑说明  ：添加角色 
	 * 1、参数校验<br/>
	 * @Title: addRoleMenu 
	 * @date 2016年11月22日 下午8:32:18
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param request
	 * @param response
	 * @param dto
	 * @return
	 */
	@RequestMapping(value = "/addRoleMenu", method = RequestMethod.POST)
	@ResponseBody
	public Object addRoleMenu(HttpServletRequest request, HttpServletResponse response, @Validated @RequestBody AddRoleMenuReqDto dto) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		try {
			resultInfo=roleMenuService.addRoleMenu(dto);
		} catch (Exception e) {
			logger.error("新增角色失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("新增角色失败");
		}
		return resultInfo;
	}
	/**
	 * 
	 * 方法描述：   查询角色列表
	 * 业务逻辑说明  ：查询角色列表 
	 * @Title: queryRoleMenu 
	 * @date 2016年12月2日 下午6:04:48
	 * @author tylong
	 * @modifier 
	 * @modifydate 
	 * @param model
	 * @param dto
	 * @param result
	 * @param request
	 * @return
	 */
	@RequiresPermissions("user:queryRoleMenu")
	@RequestMapping(value="/queryRoleMenu",method=RequestMethod.GET)
	public ModelAndView queryRoleMenu(@Valid @ModelAttribute("dto") QueryRoleMenuReqDto dto, BindingResult bindingResult, Model model, HttpServletRequest request) {
		//查询用户列表
		ModelAndView mv=new ModelAndView("sys/roleMenuList");
		try {
			BeanUtils.convertEmptyStringToNull(dto);
			PageInfo<RoleMenu> pageInfo=roleMenuService.queryRoleMenu(dto);
			mv.addObject(pageInfo);
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return mv;
	}
	
	@RequestMapping(value = "/roleBindMenu", method = RequestMethod.POST)
	public Object roleBindMenu(@Valid @ModelAttribute("dto") AddRoleMenuReqDto dto, HttpServletRequest request, HttpServletResponse response) {
		MessageResultInfo resultInfo=new MessageResultInfo();
		try {
			resultInfo=roleMenuService.roleBindMenu(dto);
		} catch (Exception e) {
			logger.error("角色绑定菜单失败", e);
			resultInfo.setResultCode(SysMessage.SYSTEM_FAILURE_CODE);
			resultInfo.setResultMsg("角色绑定菜单失败");
		}
		return resultInfo;
	}
	
	//@RequiresPermissions("role:addRole")
	@RequestMapping(value="/toBindMenu",method=RequestMethod.GET)
	public ModelAndView toBindMenu(@RequestParam String roleSid, HttpServletRequest request) {
		//跳转绑定菜单页面
		ModelAndView  mv=new ModelAndView("sys/roleBindMenu");
		try {
			//查询当前角色已绑定的菜单
			if(StringUtils.isNotEmpty(roleSid)){
				//查询角色信息
				QueryRoleReqDto roleDto = new QueryRoleReqDto();
				roleDto.setIsPage("0");
				roleDto.setSid(roleSid);
				BeanUtils.convertEmptyStringToNull(roleDto);
				PageInfo<Role> rolepageInfo=roleService.queryRole(roleDto);
				if (null != rolepageInfo && null != rolepageInfo.getList()) {
					mv.addObject("dto", rolepageInfo.getList().get(0));
				}
				//查询该角色已绑定菜单信息
				QueryRoleMenuReqDto dto = new QueryRoleMenuReqDto();
				dto.setIsPage("0");
				dto.setRoleSid(roleSid);
				BeanUtils.convertEmptyStringToNull(dto);
				PageInfo<RoleMenu> pageInfo=roleMenuService.queryRoleMenu(dto);
				String roleStr = "";
				//该角色是否绑定菜单，绑定则用','隔开
				if (null != pageInfo && null != pageInfo.getList()) {
					List<RoleMenu> rmList = pageInfo.getList();
					for (int i = 0; i < rmList.size(); i++) {
						roleStr += rmList.get(i).getMenuSid();
						if (i != rmList.size() - 1) {
							roleStr += ",";
						}
					}
				}
				mv.addObject("roleStrPid", roleStr);
			}
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		mv.addObject("tabId", "bindMenu");
		return mv;
	}
	
}
